<template>
	 <mdp-table v-if="columnCfgs.length>0" :defaultCheckColumnNum="100" ref="dataSetDataListRef" currOpType="select" operWidth="200" :params="params"  :columnCfgs="columnCfgs" :crudApis="crudApis" @loadDatas="onLoadDatas">
		<template v-if="editableColumn" #header="{column}"><el-input v-model="column.label" @change="onColumnTitleChange(column,$event)"/></template>
		<template #query>
			<span>{{  }}</span>
		</template>
	 </mdp-table>
</template> 
<script> 
import {previewSqlData} from '@/api/mdp/dm/data'
import {getSqlColumnList} from '@/api/mdp/dm/meta'
export default {
	name: 'TableDataList', 
	props: {
		editableColumn:{
			type: Boolean,
			default: false
		},
		modelValue: {
			type:String,
			default:function(){
				return null
			}
		},
		dataSource:{
			type:String,
			default:'master'
		},
		idTitleLinks:{
			type: String,
			default: ''
		}
	},
	data(){
		return {  
			params:{
				dsSql:this.modelValue,
				dataSource:this.dataSource
			},
			columnCfgs:[
				
			],
			crudApis:{
				list:previewSqlData, 
			}
		}
	},
	computed: {
		value:{
			set(val){
				this.$emit('update:modelValue',val)
			},
			get(){
				return this.modelValue
			}
		},
		idTitleLinksMap(){
			var map=new Map();
			if(!this.idTitleLinks){
				return map;
			}
			var links=JSON.parse(this.idTitleLinks)
			links.forEach(k=>{
				map.set(k.id,k.title)
			})
			return map
		}
	}, 
	watch:{
		value(){
			this.initColumnCfgs();
		},
	},
	methods:{ 
		onLoadDatas($event){
			this.$emit('loadDatas',$event)
		},
		doSearch(){  
			if(this.$refs['dataSetDataListRef']){
				this.$refs['dataSetDataListRef']?.searchTableDatas()
			}else{
				this.$emit('loadColumnsEnd',false)
			}
			  
		},
		initColumnCfgs(){ 
			
			if(!this.value){
				this.$message({message:'表名不能为空',type:'error'})
				return;
			} 
			getSqlColumnList({dataSource:this.dataSource,dsSql:this.value}).then(res=>{
				let {data,tips}=res
				
				this.$emit('loadColumnsEnd',true)
				if(tips.isOk){
					this.columnCfgs=data.map(f=>{
						
						var col={label:f.remarks||f.columnName,property:this.$mdp.toCamel(f.columnName),colType:f.dataType}
						var title=this.idTitleLinksMap.get(col.property)
						if(title){
							col.label=title
						}
						return col;
					})  
					this.params={dataSource:this.dataSource,dsSql:this.modelValue}
				}else{
					this.$message({message:tips.msg,type:'error'})
				}
			})
			
			
			//this.$refs['dataSetDataListRef']?.searchTableDatas(); 
		},
		onColumnTitleChange(column,val){
			var columnObj = this.columnCfgs.find(k=>k.property==column.property)
			columnObj.label=val
		}
	},
  created(){
		 this.initColumnCfgs();
	},
	mounted() { 
	}
}
</script>
